// Loesung_von_Aufgabe_3.7_8_vier_Sterne

Gravi[] Planeten = new Gravi[4]; // Array für Himmelskörper mit dem Namen Planet aus der Klasse Gravi
void setup()
{
  size(600, 600);
  // Nun legen wir die ganz konkreten Werte für unsere Himmelkörper fest
  // Reihenfolge der Werte: Ortsvektor r, Geschwindigkeitsvektor v, Masse m, Durchmesser der Himmelskörper D, Farbe c
  Planeten[0] = new Gravi(new PVector(20, 50), new PVector (10, 0), 2000, 20, new PVector (255, 255, 0)); // gelber Planet
  Planeten[1] = new Gravi(new PVector(80, 150), new PVector (10, 0), 2000, 20, new PVector (0, 0, 255)); // blauer Planet
  Planeten[2] = new Gravi(new PVector(140, 250), new PVector (10, 0), 2000, 20, new PVector (0, 255, 0)); // grüner Planet
  Planeten[3] = new Gravi(new PVector(200, 350), new PVector  (10, 0), 2000, 20, new PVector (255, 0, 0)); // roter Planet
}

void draw()
{
  background(0);
  for (int i = 0; i < Planeten.length; i++)
  {
    for (int j = 0; j < Planeten.length; j++)
    {
      if (i == j)
        continue; /* Für i == j würde der Himmelskörper mit sich selber wechselwirken. Mit continue vermeiden wir dies. 
       Die Operation i == j wird einfach ausgelassen. In der Referenz steht: When run inside of a for or while, 
       it skips the remainder of the block and starts the next iteration */

      Planeten[i].force(Planeten[j], 1); // Die Gravitationskonstante G wurde hier gleich 1 gesetzt
    }
  }

  for (int i = 0; i < Planeten.length; i++)
  {
    Planeten[i].move(0.1); // Für kleine t-Werte (hier t = 0.1) erhält man eine stabile Simulation.
    Planeten[i].display();
  }
}